#include "saveh264.h"

SaveH264::SaveH264()
{

}

void SaveH264::onWorking(const QString ip, const quint16 port, const QByteArray arr)
{
    if(!m_saveStatues || arr.isEmpty() || ip != m_srcIP) return;
    // 文件未打开则创建新文件
    if (!m_file.isOpen()) {
        createNewFile();
    }

    // 写入数据
    if (m_file.isOpen()) {
        if (m_file.write(arr) == -1) {
            qDebug() << "写入文件失败:" << m_file.errorString();
            m_file.close();
            return;
        }
    }
}

void SaveH264::onStopTimer()
{
    if(m_fileTimer->isActive())
        m_fileTimer->stop();
}

void SaveH264::onInitTimer()
{
    m_fileTimer = new QTimer(this);
    connect(m_fileTimer, &QTimer::timeout, this, &SaveH264::onFileTimeOut);
    connect(this, &SaveH264::sigStopTimer, this, &SaveH264::onStopTimer);
}

void SaveH264::onFileTimeOut()
{
    qDebug() << "文件时间到期，检查是否需要创建新文件";

    if (m_file.isOpen()) {
        m_file.close();
        qDebug() << "关闭文件";
        return;
    }
}

void SaveH264::createNewFile()
{
    // 检查磁盘是否可用
    if (!checkAndSwitchDisk()) {
        return; // 所有磁盘不可用，直接返回
    }

    // 关闭当前文件
    if (m_file.isOpen()) {
        m_file.close();
    }

    // 构造完整文件路径：磁盘路径/基础路径/视频名称/文件名
    QString currentDisk = m_diskPaths[m_currentDiskIndex];
    QString fullDir = QString("%1/%2/%3").arg(currentDisk).arg(m_fileSavePath).arg(m_videoName);
    QDir dir(fullDir);
    if (!dir.exists() && !dir.mkpath(".")) { // 确保目录存在
        qDebug() << "无法创建目录:" << fullDir;
        return;
    }

    // 生成文件名（包含时间戳）
    m_fileStartTime = QDateTime::currentDateTime();
    QString fileName = QString("%1/%2_%3.h264")
            .arg(fullDir)
            .arg(m_desc)
            .arg(m_fileStartTime.toString("yyyy_MM_dd_hh_mm_ss"));

    m_file.setFileName(fileName);
    if (!m_file.open(QIODevice::WriteOnly)) {
        qDebug() << "无法创建文件:" << fileName << "错误:" << m_file.errorString();
        return;
    }

    qDebug() << "创建新文件: " << fileName;
    m_fileTimer->start(m_splitTimeMinutes * 60 * 1000);
}
